package com.devshephard.test.proxy.jdk;

import java.lang.reflect.Proxy;

/**
 * JDK代理,需要一个接口
 */
public class ProxyDemo {

    //需要被代理的对象
    private Class<?> type;

    private Target target = new Target();

    //返回代理对象
    public Object getProxyObj(){

        //先获取类加载器,这个类加载器跟代理相关的目标类无关,可以是其他类(当然,也可以是接口本身)
        ClassLoader loader = ProxyInterface.class.getClassLoader();
        //进行代理
        Object o = Proxy.newProxyInstance(loader, new Class[]{ProxyInterface.class}, (proxy, method, args) -> {

            System.out.println("before....");
            //method.invoke(target,args); //这里要求代理对象必须实现接口
            System.out.println(method.getName());
            return "This is a proxy string....";

        });

        return o;
    }

}
